package com.github.baichuan.iot.protocol.codec;

import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

@Getter
@Setter
@ToString
public class MessageEncodeContext {

    /**
     * 设备标识
     */
    private String device;

    /**
     * 消息流水号
     */
    private Integer sequence;

    /**
     * 消息Id
     */
    private int id;

    /**
     * 消息负载
     */
    private byte[] payload;

    /**
     * 数据报文内容
     */
    private byte[] datagram;

    /**
     * 协议自定义属性值
     */
    private Map<String, Object> attributes = new HashMap<>();

    public void putAttribute(@NonNull String name, @NonNull Object value){
        attributes.put(name, value);
    }

    public <T> Optional<T> getAttribute(@NonNull String name, @NonNull Class<T> clazz){
        if(attributes.containsKey(name))
            return Optional.of(clazz.cast(attributes.get(name)));
        else
            return Optional.empty();
    }
}
